前言

由于项目的需要,hadoop2.2.0与hbase0.98.5的集群搭建已经有一段时间了。今日重新研究了一遍整个集群的搭建,对整个搭建过程有了进一步的理解。

准备工作

  • 时间的同步
  • 主节点上使用ssh-keygen生成密钥,并使用ssh-copy-id将公钥拷贝到其他机器。注意主节点自己也需要安装ssh server,并且自己对自己也要能无密码登录
  • JAVA_HOME的设置

1. hdfs

以前搭建这个平台主要是使用hbase作为存储数据库,所以只使用了hadoop的hdfs。其核心配置文件有三个:hadoop-env.sh,core-site.xml,hdfs-site.xml。(当然,yarn框架也使用到了hadoop-env.shcore-site.xml,这里分开看。)下面分开来看:

  • hadoop-env.sh
    这个文件主要配置如java路径、hadoop配置文件目录、日志目录等环境变量,最简单的配置是只修改java路径(JAVA_HOME)而不修改其他。不过今天我想重启集群时发现stop-hdfs.sh脚本无法关闭集群,网上找到的原因是集群进程的pid号默认放在/tmp目录下导致pid号的定期删除,而管理脚本找不到pid号导致管理失败。于是考虑将pid放到自己定义的目录下。hadoop-env.sh文件中定义了一个HADOOP_PID_DIR变量,于是可以简单地在.bashrc文件中加入该变量即可。如果不行,在hadoop-env.sh中直接定义该变量。

  • core-site.xml
    这个文件核心设置如下:

xml<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
        <description>指明了默认的hdfs的路径和端口。在HBase指明在hdfs上的存储位置时用的就是这个路径</description>
    </property>

    <property>
        <name>hadoop.tmp.dir</name>
        <value>/home/user/tmp/hadoop</value>
        <description>hadoop的一些临时文件存放目录。其他一些目录也使用了该目录作为基础</description>
    </property>
</configuration>

我配置了这两个参数后系统就可以正常工作了。详细的官网配置地址在此处

  • hdfs-site.xml
    核心配置如下:
xml<configuration>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/home/user/tmp/hadoop/dfs/name</value>
        <description>名字节点数据的存放目录</description>
    </property>

    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/home/user/tmp/hadoop/dfs/data</value>
        <description>数据节点数据的存放目录</description>
    </property>

    <property>
        <name>dfs.replication</name>
        <value>3</value>
        <description>hdfs备份的数目</description>
    </property>
</configuration>

配置很简单。详细配置在此处

2.yarn

hadoop 2.2.0采用了第二代架构yarn,和第一代相比有着不小的改变。其配置文件有yarn-env.sh,yarn-site.xml,mapred-site.xml

  • yarn-env.sh
    这个文件也是设置如java路径等环境变量。可以在文件中或者直接在.bashrc中设置如JAVA_HOME或者YARN_PID_DIR(设置pid的存放目录)等变量。pid默认存放在/tmp目录下,丢失也会导致stop-yarn.sh等脚本的失效。(stop-yarn.sh脚本实际上调用的是yarn-daemon.sh,其中可以发现YARN_PID_DIR变量)。

  • yarn-site.xml
    核心配置如下:

xml<configuration>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>localhost</value>
        <description>resourcemanager的主机名。默认为0.0.0.0。被很多其他的参数作为基础</description>
    </property>

    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>

    <property>
        <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
        <value>org.apache.hadoop.mapred.ShuffleHandler</value>
    </property>
</configuration>

如上的三条配置即可成功运行。详细配置见此处

  • mapred-site.xml
xml<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>

    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>localhost:10020</value>
    </property>

    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>localhost:19888</value>
    </property>
</configuration>

该配置文件主要配置以下和mapreduce任务相关的配置。甚至后面两条关于address的配置也不是必须的,不过我没去尝试。完整配置在这里

3. hadoop其他配置文件

其他配置文件包括slavesmasters。很简单,不详述。

配置完成后使用scp命令同步到其他节点。先使用hadoop namenode -format格式化名字节点后,在启动脚本start-dfs.sh看是否成功。

4. zookeeper

前一段时间安装的hbase用的是自带的zookeeper。后来发现还是独立配置zookeeper要方便些,于是就接触了一下zookeeper的安装。其配置文件只有zoo.cfg,官网给出的单机配置如下:

configurationtickTime=2000
dataDir=/home/user/tmp/zookeeper
clientPort=2181

集群配置也不复杂,官网很详细,也不赘述。有一点注意的是集群数目最好是奇数。由于其选举的算法,奇数是最优的。
zookeeper默认的启动日志zookeeper.out是放在当前目录下的(zkEnv.sh中设置ZOO_LOG_DIR变量,zkServer.sh中指定zookeeper.out文件),所以可以在zkEnv.sh中设置ZOO_LOG_DIR变量指定自己的日志存放路径。
启动使用zkServer.sh start命令。

参考:
解读zookeeper的配置项
修改Zookeeper日志输出路径

5. hbase

hbase的配置文件有hbase-env.shhbase-site.xml。其他的配置如regionservers很简单,不赘述。hbase配置时还需要注意调整hosts文件以及系统的打开文件数目等的限制。见我的上次总结

  • hbase-env.sh
    最好在其中设置JAVA_HOME而不是用系统的JAVA_HOME参数(官方文档好像有提到这一点)。可以在其中设置HBASE_PID_DIR以修改pid的存放路径。由于使用独立的zookeeper,还需要设置export HBASE_MANAGES_ZK=false来禁止使用自带的zookeeper。

  • hbase-site.xml

xml<configuration>
    <property>
        <name>hbase.rootdir</name>
        <value>hdfs://localhost:9000/hbase</value>
        <description>hbase数据存放位置。这里是放在了hdfs上。</description>
    </property>

    <property>
        <name>hbase.tmp.dir</name>
        <value>/home/user/tmp/hbase</value>
        <description>hbase的一些临时文件存放目录。</description>
    </property>

    <property>
        <name>hbase.cluster.distributed</name>
        <value>true</value>
        <description>设置为分布式</description>
    </property>

    <property>
        <name>hbase.zookeeper.quorum</name>
        <value>localhost</value>
        <description>设置zookeeper的集群。如果是独立zookeeper,则此处填写zookeeper集群的每台机器,用逗号隔开;如果是自带zookeeper,则填写要启动zookeeper服务的机器列表。自带zookeeper不要忘了设置hbase.zookeeper.property.dataDir设置临时文件存放目录</description>
    </property>

</configuration>

hbase-site.xml的完整配置见此处

小结

此处把整个集群安装的配置过了一遍,仅仅包含了最小化的设置。更为具体专业的设置还需要自己进一步深入学习了解。

参考:修改 hadoop 集群及hbase集群的pid文件存放位置


psy
392 声望12 粉丝

假装平静的外表下一颗躁动的心


引用和评论

0 条评论